From 6bec7aae89fecb97c42d83ecee70b6888f699d4b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 17 Jan 2017 06:15:03 +0100 Subject: [PATCH] vulkan: Generate clip shaders from same source Instead of having 3 different shaders for the different clipping versions, just have one shader and use a preprocessor define to use different clip functions. That preprocessor define is set in the Makefile. Also use foo.frag and foo.vert as the file extensions instead of using foo.frag.glsl and foo.vert.glsl, as that's what glslc suggests as extension. --- gsk/Makefile.am | 75 +++++++------ gsk/resources/vulkan/blend-clip.frag.glsl | 12 -- gsk/resources/vulkan/blend-clip.frag.spv | Bin 632 -> 1328 bytes gsk/resources/vulkan/blend-clip.vert.glsl | 32 ------ gsk/resources/vulkan/blend-clip.vert.spv | Bin 4788 -> 4868 bytes ...lend-clip-rounded.frag.glsl => blend.frag} | 1 - gsk/resources/vulkan/blend.frag.spv | Bin 632 -> 1328 bytes ...lend-clip-rounded.vert.glsl => blend.vert} | 1 - gsk/resources/vulkan/blend.vert.spv | Bin 1964 -> 3136 bytes .../vulkan/border-clip-rounded.frag.spv | Bin 10080 -> 10212 bytes .../vulkan/border-clip-rounded.vert.glsl | 103 ------------------ gsk/resources/vulkan/border-clip.frag.glsl | 23 ---- gsk/resources/vulkan/border-clip.frag.spv | Bin 9008 -> 9560 bytes ...der-clip-rounded.frag.glsl => border.frag} | 12 +- gsk/resources/vulkan/border.frag.spv | Bin 9008 -> 9560 bytes .../{border-clip.vert.glsl => border.vert} | 1 - gsk/resources/vulkan/border.vert.spv | Bin 7216 -> 7428 bytes gsk/resources/vulkan/color-clip.frag.glsl | 10 -- gsk/resources/vulkan/color-clip.frag.spv | Bin 720 -> 1448 bytes gsk/resources/vulkan/color-clip.vert.glsl | 28 ----- gsk/resources/vulkan/color-clip.vert.spv | Bin 3772 -> 3880 bytes .../vulkan/color-matrix-clip.frag.glsl | 31 ------ .../vulkan/color-matrix-clip.frag.spv | Bin 2160 -> 2824 bytes .../vulkan/color-matrix-clip.vert.glsl | 38 ------- .../vulkan/color-matrix-clip.vert.spv | Bin 5140 -> 5220 bytes ...ip-rounded.frag.glsl => color-matrix.frag} | 1 - gsk/resources/vulkan/color-matrix.frag.spv | Bin 2160 -> 2824 bytes ...ip-rounded.vert.glsl => color-matrix.vert} | 1 - gsk/resources/vulkan/color-matrix.vert.spv | Bin 2316 -> 3488 bytes ...olor-clip-rounded.frag.glsl => color.frag} | 1 - gsk/resources/vulkan/color.frag.spv | Bin 720 -> 1448 bytes ...olor-clip-rounded.vert.glsl => color.vert} | 1 - gsk/resources/vulkan/color.vert.spv | Bin 1780 -> 2148 bytes gsk/resources/vulkan/linear-clip.frag.glsl | 33 ------ gsk/resources/vulkan/linear-clip.frag.spv | Bin 2320 -> 3032 bytes gsk/resources/vulkan/linear-clip.vert.glsl | 75 ------------- gsk/resources/vulkan/linear-clip.vert.spv | Bin 7832 -> 7928 bytes ...ear-clip-rounded.frag.glsl => linear.frag} | 1 - gsk/resources/vulkan/linear.frag.spv | Bin 2320 -> 3032 bytes ...ear-clip-rounded.vert.glsl => linear.vert} | 1 - gsk/resources/vulkan/linear.vert.spv | Bin 6116 -> 6212 bytes 41 files changed, 42 insertions(+), 439 deletions(-) delete mode 100644 gsk/resources/vulkan/blend-clip.frag.glsl delete mode 100644 gsk/resources/vulkan/blend-clip.vert.glsl rename gsk/resources/vulkan/{blend-clip-rounded.frag.glsl => blend.frag} (91%) rename gsk/resources/vulkan/{blend-clip-rounded.vert.glsl => blend.vert} (97%) delete mode 100644 gsk/resources/vulkan/border-clip-rounded.vert.glsl delete mode 100644 gsk/resources/vulkan/border-clip.frag.glsl rename gsk/resources/vulkan/{border-clip-rounded.frag.glsl => border.frag} (72%) rename gsk/resources/vulkan/{border-clip.vert.glsl => border.vert} (99%) delete mode 100644 gsk/resources/vulkan/color-clip.frag.glsl delete mode 100644 gsk/resources/vulkan/color-clip.vert.glsl delete mode 100644 gsk/resources/vulkan/color-matrix-clip.frag.glsl delete mode 100644 gsk/resources/vulkan/color-matrix-clip.vert.glsl rename gsk/resources/vulkan/{color-matrix-clip-rounded.frag.glsl => color-matrix.frag} (96%) rename gsk/resources/vulkan/{color-matrix-clip-rounded.vert.glsl => color-matrix.vert} (97%) rename gsk/resources/vulkan/{color-clip-rounded.frag.glsl => color.frag} (90%) rename gsk/resources/vulkan/{color-clip-rounded.vert.glsl => color.vert} (96%) delete mode 100644 gsk/resources/vulkan/linear-clip.frag.glsl delete mode 100644 gsk/resources/vulkan/linear-clip.vert.glsl rename gsk/resources/vulkan/{linear-clip-rounded.frag.glsl => linear.frag} (97%) rename gsk/resources/vulkan/{linear-clip-rounded.vert.glsl => linear.vert} (98%) diff --git a/gsk/Makefile.am b/gsk/Makefile.am index 06ed18e97e..9d13253956 100644 --- a/gsk/Makefile.am +++ b/gsk/Makefile.am @@ -62,39 +62,28 @@ gsk_private_vulkan_include_shaders = \ resources/vulkan/clip.vert.glsl \ resources/vulkan/constants.glsl \ resources/vulkan/rounded-rect.glsl +gsk_private_vulkan_fragment_shaders = \ + resources/vulkan/blend.frag \ + resources/vulkan/border.frag \ + resources/vulkan/color.frag \ + resources/vulkan/color-matrix.frag \ + resources/vulkan/linear.frag +gsk_private_vulkan_vertex_shaders = \ + resources/vulkan/blend.vert \ + resources/vulkan/border.vert \ + resources/vulkan/color.vert \ + resources/vulkan/color-matrix.vert \ + resources/vulkan/linear.vert gsk_private_vulkan_shaders = \ - resources/vulkan/blend-clip.frag.glsl \ - resources/vulkan/blend-clip-rounded.frag.glsl \ - resources/vulkan/blend-clip-rounded.vert.glsl \ - resources/vulkan/blend-clip.vert.glsl \ - resources/vulkan/blend.frag.glsl \ - resources/vulkan/blend.vert.glsl \ - resources/vulkan/border-clip.frag.glsl \ - resources/vulkan/border-clip.vert.glsl \ - resources/vulkan/border-clip-rounded.frag.glsl \ - resources/vulkan/border-clip-rounded.vert.glsl \ - resources/vulkan/border.frag.glsl \ - resources/vulkan/border.vert.glsl \ - resources/vulkan/color-clip.frag.glsl \ - resources/vulkan/color-clip-rounded.frag.glsl \ - resources/vulkan/color-clip-rounded.vert.glsl \ - resources/vulkan/color-clip.vert.glsl \ - resources/vulkan/color.frag.glsl \ - resources/vulkan/color.vert.glsl \ - resources/vulkan/color-matrix-clip.frag.glsl \ - resources/vulkan/color-matrix-clip-rounded.frag.glsl \ - resources/vulkan/color-matrix-clip-rounded.vert.glsl \ - resources/vulkan/color-matrix-clip.vert.glsl \ - resources/vulkan/color-matrix.frag.glsl \ - resources/vulkan/color-matrix.vert.glsl \ - resources/vulkan/linear-clip.frag.glsl \ - resources/vulkan/linear-clip-rounded.frag.glsl \ - resources/vulkan/linear-clip-rounded.vert.glsl \ - resources/vulkan/linear-clip.vert.glsl \ - resources/vulkan/linear.frag.glsl \ - resources/vulkan/linear.vert.glsl + $(gsk_private_vulkan_fragment_shaders) \ + $(gsk_private_vulkan_vertex_shaders) gsk_private_vulkan_compiled_shaders = \ - $(gsk_private_vulkan_shaders:.glsl=.spv) + $(gsk_private_vulkan_fragment_shaders:.frag=.frag.spv) \ + $(gsk_private_vulkan_vertex_shaders:.vert=.vert.spv) \ + $(gsk_private_vulkan_fragment_shaders:.frag=-clip.frag.spv) \ + $(gsk_private_vulkan_vertex_shaders:.vert=-clip.vert.spv) \ + $(gsk_private_vulkan_fragment_shaders:.frag=-clip-rounded.frag.spv) \ + $(gsk_private_vulkan_vertex_shaders:.vert=-clip-rounded.vert.spv) endif gsk_public_source_h = \ @@ -180,13 +169,29 @@ resource_files = \ $(gsk_private_vulkan_compiled_shaders) \ $(gsk_private_vulkan_shaders) -resources/vulkan/%.frag.spv: resources/vulkan/%.frag.glsl +resources/vulkan/%-clip-rounded.frag.spv: resources/vulkan/%.frag @if test -z "$(GLSLC)"; then echo "Missing glslc. See https://github.com/google/shaderc"; exit 1; fi - $(AM_V_GEN) $(GLSLC) -fshader-stage=fragment -o $@.tmp $< && mv $@.tmp $@ + $(AM_V_GEN) $(GLSLC) -fshader-stage=fragment -DCLIP_ROUNDED_RECT -o $@.tmp $< && mv $@.tmp $@ -resources/vulkan/%.vert.spv: resources/vulkan/%.vert.glsl +resources/vulkan/%-clip-rounded.vert.spv: resources/vulkan/%.vert @if test -z "$(GLSLC)"; then echo "Missing glslc. See https://github.com/google/shaderc"; exit 1; fi - $(AM_V_GEN) $(GLSLC) -fshader-stage=vertex -o $@.tmp $< && mv $@.tmp $@ + $(AM_V_GEN) $(GLSLC) -fshader-stage=vertex -DCLIP_ROUNDED_RECT -o $@.tmp $< && mv $@.tmp $@ + +resources/vulkan/%-clip.frag.spv: resources/vulkan/%.frag + @if test -z "$(GLSLC)"; then echo "Missing glslc. See https://github.com/google/shaderc"; exit 1; fi + $(AM_V_GEN) $(GLSLC) -fshader-stage=fragment -DCLIP_RECT -o $@.tmp $< && mv $@.tmp $@ + +resources/vulkan/%-clip.vert.spv: resources/vulkan/%.vert + @if test -z "$(GLSLC)"; then echo "Missing glslc. See https://github.com/google/shaderc"; exit 1; fi + $(AM_V_GEN) $(GLSLC) -fshader-stage=vertex -DCLIP_RECT -o $@.tmp $< && mv $@.tmp $@ + +resources/vulkan/%.frag.spv: resources/vulkan/%.frag + @if test -z "$(GLSLC)"; then echo "Missing glslc. See https://github.com/google/shaderc"; exit 1; fi + $(AM_V_GEN) $(GLSLC) -fshader-stage=fragment -DCLIP_NONE -o $@.tmp $< && mv $@.tmp $@ + +resources/vulkan/%.vert.spv: resources/vulkan/%.vert + @if test -z "$(GLSLC)"; then echo "Missing glslc. See https://github.com/google/shaderc"; exit 1; fi + $(AM_V_GEN) $(GLSLC) -fshader-stage=vertex -DCLIP_NONE -o $@.tmp $< && mv $@.tmp $@ gsk.resources.xml: Makefile.am $(AM_V_GEN) echo "" > $@; \ diff --git a/gsk/resources/vulkan/blend-clip.frag.glsl b/gsk/resources/vulkan/blend-clip.frag.glsl deleted file mode 100644 index 4575c49848..0000000000 --- a/gsk/resources/vulkan/blend-clip.frag.glsl +++ /dev/null @@ -1,12 +0,0 @@ -#version 420 core - -layout(location = 0) in vec2 inTexCoord; - -layout(set = 0, binding = 0) uniform sampler2D inTexture; - -layout(location = 0) out vec4 color; - -void main() -{ - color = texture (inTexture, inTexCoord); -} diff --git a/gsk/resources/vulkan/blend-clip.frag.spv b/gsk/resources/vulkan/blend-clip.frag.spv index ef5dc6b6bfdf59d642833a33356328313b61db15..9d337c7202df7258b7fc248265994313eb2f63e7 100644 GIT binary patch literal 1328 zcmY+ETW`}q5QVpmorV^AQK1(KC245ksY0mS6oHT`p^K79JP(=zSBhqBS3R$*#w3oir;DrSgT>X^K-g97+wxgjXzyrR zY0@~&ZOpMfH!=N3$w+F>y5_#cpTZyIJXc$mW4`4!djH|J zc`Q7d7t`}JDavtDlE1BU@T}P)6Ta4Qzs%u(P3K8a-0<9?<-bQkIfY-b=Xn*&Ps8Zj z)TXvQorup=Q_gs*#rqrrw7|^T#LRj`P>VR2IapxkMo)hi!gcSi#qJI63$rfNMXljG z*lcj*K=;1EF(2Hh!7&@$7n!HGBpV2)+bB-9AZF%aU8B~~ig(H4Xeo00i;$ZF>ZeOQ%<*5m7t{NXG)1Ct8 z$hTjK;K&E&U08K~-i7mfiudK|jhPNriTkQKc#OQq)t)$cz$X>=QnPbsVCWz2vU9gDYoB^|x<|A0Mx^Z$U^HstApGkmA;f5o#W-#@m~Y19A! literal 632 zcmY+A%}c{T5XHxS+uAQHiU`u`y?9U&L@y$_1bR^L7$nId5R(#9(f`Lk(u?5xtu4k4 zliBz7?VFjc*G}7JTl)I8XTNJ~HDR-!wOsc62Y>!rM)UKFGZX`>J0Y5(wXLB{ygVlv z2iuCVVk8~B3TRiCtJ$Y6HLPo%A9#y}=idk6av8jqA88z@j{XSA{GcM{kb1%kv^K^Vau{#k0WNJ8|d_&ng&? zjeerZm~G~!G`HW^z9nv|IFKK20H)um{vBmr5&n9O=^gG+Q*@Ql>$(1|4L*{xrxSGe z?W|RB_<@;$Mg5^Ne)Nfcq>L9ldN4D=UFwz4(JPCdzQi<@Z^Tk#puiuD$F73=Pf{_{ RM1cnWRu0St_pJ(7iXV$-GTZs;xm5Rp?%pbFZSGa_Mw# zw)?lVmK(P5F1Q4a(q^;z2+d>=&4Kga1j^cbsW%sQwpHW4@}4qAGX82jR36N=;^XDP z+D-0c^+RwUJOE+hJUlz`5n69PZtkqkJchMEIBx;2C-T6Hh3QY=c3X3j6H7dw0#9`X z?-^Xr5Q6s{ZoeydFQRBHF)bYB!UpgXIMg9FQIrJb*Xmxl)*{@b!;8O$>n$48?xiie zZ_s*6Ub^uX=Dg7R4z4F$zR&eE()Vz?t+|qVAK;$nUU;7lJo`Q$(R!UE<}NII;xbxK zgqXvLpYZIqCPeia?y0WeeSzy`WB!V^-xcb<8M9_K=I>~SI>aW5{>SWIxYi0h`{F;) zdMioHt6O&0(0Z$Jv%h*~9X1V)5!(#UpI`v21LymT{RQ;H);NU2ffaCy|lLtn{Hm4YF?gB`uNRZM zS)+Fbt|mOTy2+%rcnHj%30ZbHE5U4jH;iQ?>14Q&jf7u=yIW7tiWQ$?tBIYQyy7#o z$H16#Xcg{R@CbOKHV0R8ny5X8o9~I*izGR}EgE>12fKimU=~=!B!ZHYjNazfcY@6s zw*cI3T*a$gTX0dsi~o6FW2-HO&B5Bl8<_QC?pwH;@Ho%y{L$~=W*c)O*OuV+(--Gi zh8O2~kFBYs3X>hm-3f2Q`A*Bk>!sn6%o{XNjA`~&l7gGm4Y diff --git a/gsk/resources/vulkan/blend-clip-rounded.frag.glsl b/gsk/resources/vulkan/blend.frag similarity index 91% rename from gsk/resources/vulkan/blend-clip-rounded.frag.glsl rename to gsk/resources/vulkan/blend.frag index 81bd003923..ee9eb459a9 100644 --- a/gsk/resources/vulkan/blend-clip-rounded.frag.glsl +++ b/gsk/resources/vulkan/blend.frag @@ -1,6 +1,5 @@ #version 420 core -#define CLIP_ROUNDED_RECT #include "clip.frag.glsl" layout(location = 0) in vec2 inPos; diff --git a/gsk/resources/vulkan/blend.frag.spv b/gsk/resources/vulkan/blend.frag.spv index 9dcff6d120b133e6c797fcb6a16399231a26177b..9d337c7202df7258b7fc248265994313eb2f63e7 100644 GIT binary patch literal 1328 zcmY+ETW`}q5QVpmorV^AQK1(KC245ksY0mS6oHT`p^K79JP(=zSBhqBS3R$*#w3oir;DrSgT>X^K-g97+wxgjXzyrR zY0@~&ZOpMfH!=N3$w+F>y5_#cpTZyIJXc$mW4`4!djH|J zc`Q7d7t`}JDavtDlE1BU@T}P)6Ta4Qzs%u(P3K8a-0<9?<-bQkIfY-b=Xn*&Ps8Zj z)TXvQorup=Q_gs*#rqrrw7|^T#LRj`P>VR2IapxkMo)hi!gcSi#qJI63$rfNMXljG z*lcj*K=;1EF(2Hh!7&@$7n!HGBpV2)+bB-9AZF%aU8B~~ig(H4Xeo00i;$ZF>ZeOQ%<*5m7t{NXG)1Ct8 z$hTjK;K&E&U08K~-i7mfiudK|jhPNriTkQKc#OQq)t)$cz$X>=QnPbsVCWz2vU9gDYoB^|x<|A0Mx^Z$U^HstApGkmA;f5o#W-#@m~Y19A! literal 632 zcmY+A%}c{T5XHxS+iE|oC?ZI!_u@fC5WR@x66is}V~`|=Kuk)SivB`|%+tSyuefwP_s|lO+tmU%jKl-y}8O<&(&r$TP?u2Lt*0zQ+@%oZv z9BeB_ilKDyDxh6mu4bRQ)Ud93e&EgLp8pVpi$$<3KhiizlPnIRq=>^Zd5h6?D!L>K z(^XUzG^ME41yeiB)4Wh_>f2RLvZwgHTotl(9KAX2KF^ED%v;|(5zhj1@6@3`Jgs0n zHu|w9W45WA(%k+)`|Gujl%=HuzY|o=(u= zx3gBk;Rj|07WD_p_|Yf&p)y|Z=)uecccoWCN3Se;`V!Mrz7 diff --git a/gsk/resources/vulkan/blend-clip-rounded.vert.glsl b/gsk/resources/vulkan/blend.vert similarity index 97% rename from gsk/resources/vulkan/blend-clip-rounded.vert.glsl rename to gsk/resources/vulkan/blend.vert index fadf4b9247..c9bbb40906 100644 --- a/gsk/resources/vulkan/blend-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/blend.vert @@ -1,6 +1,5 @@ #version 420 core -#define CLIP_ROUNDED_RECT #include "clip.vert.glsl" layout(location = 0) in vec4 inRect; diff --git a/gsk/resources/vulkan/blend.vert.spv b/gsk/resources/vulkan/blend.vert.spv index 962a1b4e18904869424484829444034b01068556..e814653f9b8a513410d51cfced011c5954f212bf 100644 GIT binary patch literal 3136 zcmZ9NYf~Im5QZnfa*Ih!VlG;Wi$qN%!KmbBOhQClqA28Iyt@!~fYD`lWfy|qv@EOq z>VNP@=8KlkGdmrpa;WC?`<}P^^f`S71_!1_lH>qChmyxhe;iE)z)5m28P4b0(*32G zZm%&jd+DNz!^vPSRC5HCV+h+`%Ub%cV$;|xwt#(uZDWJ{3^4yq;7~H2)RyYC<>lJa zLVdl{sdsz7G}C%BYo+x@wv(>+vb|K@Xi1l~)|*Zymuw3$}$OX1%Q4%5!>O4r8w{uk3cW=G(1qZ>>d@#t!AY zn(e(#o=cs5@Vxa$?cG+R`;_;tbN+GG=xxc5qb1P5Ho$2Bk~%&*aVwy#<1LAu|+CYVazXJR1d+wGl3QX{W-Ie|IEz71c^Ti7Bo-jk#M zlGF_5ob@l3&RofH<>?(v8N@J$_u$|$C(mQSc{l3jN}PG+R!W?ABDadUzxmWzulG={ z-*b!2?YeIw@NuGyndkcme3-e4 zIi?GI1Yga|V9#%iocWJ3yC#3Vz`lPuipBTv2;W*MU(VWt`w`!GM{qyk%c+ZgH1W-8 z4rA0rKU|A5w(!e!x509n!Gp~IOhL{=a}ORFBSa1@cQQX4?maQ A^#A|> literal 1964 zcmZ9MTTc{05QQ7|0*HW!TvWtG6fayv1w;`6(JUsLuwLTpiaP^4$uhIqnMHil2Y-P7 z!5`_1iRbH`CKG#8be+?us;jGe$o0n!TV7pT zK{0G{R)}WAT(Ev#e@_mB5HKaXDZ3|oCVMW+>DR0Iw}SGDDOYOcgM)JAO|9N))#Bt^ z)2}sy(64zx+pj0VsgJHdqYJ`%v*Tq21u3%of-h>1=;$c+lh_or=eTey!q3~fg7Cf4 z8{wj@@wi$0}}}zXI*|?G2*L!ySpSPbwaNMw|?YWl3 zx3s4w;ezdX)JZ=2XM0i9_AJL81fi(z@l84H#|%LlVD4;C_CU6;D0f~sMp^xYqrUyj znFobe`obFgW{P=#aKtkY$ry|3 z1+l|2ILv8AiPOqe~$K@5hEmYT0yfSNUU@&%#6a^$4BrG=`py3!a=p|l?}Izq(i;0+mC@e=DbQR?Id}$pIPG=$ zS?#ni97YZ7jn>@}_pqxdhvU3eRYz}DWoTLBTi~7lQV!PEWbA{6 zTGll`mGOS4g<8SrsDqeI8TaOT{UYVy8QETM31_u0h2gOOd%Z0#+v^=+dJXS-uq%H@ c=6d}~J~`oCulM9rQ+F+A-yGauRkk7f2iuQ|QUCw| diff --git a/gsk/resources/vulkan/border-clip-rounded.frag.spv b/gsk/resources/vulkan/border-clip-rounded.frag.spv index 3be544337c20d88fe019901d4f3975ba41abbcf5..690c02be05ad5375d1abfac52219f4b2b3d2434c 100644 GIT binary patch literal 10212 zcmai(d7PDH6~|v-1`tpI0XIZYQB=SUK|=);9So4g4cB3qxj0vcJLAk{P~1RK5%*ou z%1TSyZ8dYr(#+D#(#*25Qrq{;rL?}^d*6eP??1iF`8>bh@0{~I=Q;25zH{%;ukX$S zvaApPHqUPFlhv+aSzmaT4bJ-4#-@2k&zsy+ZJRu0|Gf>^BI{R+GiJ+dNY=opt!OD% zbexW36?Qgu9(FNyJ$3^&lw4z36x5HEvg}UuhHOyQG_Sd7!GflFhc~x&bv5@?&+aHS zca$ro=C*QoskK_}Eg3g3i7QuHJ65)(0gXhYwKNhxgf&VX9p$c`au0L$R44Q<-*>u} zWsTG@2!9u5?qJ65mbUWB9{Hebc$(YV*<0#vIjyuQKjvtl56sb7u2l1RhBCI6D%DbV zecoa4cjs-)M#2|&uB^0`+7`1nI$hV0vt{b6-=8iSM|-l?&hAR7yLnZ)t=f)jlh6L; zzV=f2wDxMP?qS(>=-u`Cn{8h6rrLX|-78zGlaj?J^)8F7ZLTF*!_Mekojt@f zWV;yC+0hyG?WT{@Y22RTed_oia2saMO!b!TmK8alRp7mF?oo5KqaJ^L@cbUG%lWdL zZwQ{pUn4Iq-;}>GcpiUO&LjWc;CcQ7@cQcY^&f<%^*&tSj}-W$^?X}W+wWrq|KkPz zM1emEZ)>)?dj3-d|I-EjOo2ZOC!gKa^PemDpD*wi-opoEFT(S)9H-TzUfav7j6A)a zD{E(@F&ocAQ7Nrzj%THjsL8n&4~g2;T#JXp^D!IEO?uXj054qG(|%ZIrKj3b@$o@z zsOi9LMQ<0p9!F^HT*jiI*PcPnYdoDkx6bQZ(sSG#i^DyKbMSSsCbY(v%9C@s>^;0O zYlri^ReQ>9yaDSuzGKUk+N-0s58t=t%3-y)#PRt{!u|OU4t-Akg0O~jowHo2O=+C( z>2l@J&hEBS_q+KG+4<;cZEFhrB6v$jS9?odm+$&=Wg$;#z0OMt@#_ox@&doI!2P}P z?sMKy`yJwbeDdALErs}v37?bP$42UzLx%Uo%Xf)as`)#~_jYK88aFf1yw_?A6V3aq zwiIjPuDgbDO|0*I@?96)`y@9Y+R@X?pz~s-P*^H>+dSHFy|iycW!;o zzcr)tt2>V|qZy4c&zKz;jW|LbOuu{)<`wZvz~MK)4YTLr_k)u6DDqc< zBi{K|W5(O(ml>_iKD)117~PlpM38;ifn@iRTKLA`voEQ+u6>!{qS=~x3I8>jCOs`oyt zn`6ucU^RW-V|mQC7VMeS=lzx+n9qG7cr5wm=rhJMqaJf#3XZuw4|09>?lQ3F**wpN z+_~-H2C&})%+VL~T>*9tb38xtnC~iZ%;#B>$9z|VozEP77v=Zr8nA2WAHo~jwXX&9 z!!w>``kNT1V6N#I*YBF%n;XGCV{&tE0vmG`^XtDEY>ax;c`G>T^o+}$+w*O_HJf`I zcs!#q`i$}UR)3oc55Rn`U3UoP<@;+IaXwFeHw-)&?DM`kqtCnk-7xP%aQ7>ZIwydg zBlzxM=ULC1#_fR_qi$`^rxx*(z-sow_{o^sL@Z+V0;hBC4L45RIju=8;`wS+n=|;n zIlm$A!+vmM)Z-rS4_5acM&4Aga}S|=_HP>BRXd1lmn_O9N)nVYow zGw1%S!`?c#Jf4xmz@DR-m_B2yPu=zG$KjY-^!5nw>|BrMXAaz6+F$)mn7y}u`qKXS zOnUj*%AWaq!SC+TKfk-%v+Wt9N4?;*XXh9Ax&q%&;MWxR#sa^q!0%1C_w0d$4+Q&N zH?7C-x+#Ao;pRV@aPuE4@W%`MiG-W~WWvpVs=%Kv@MjWk{<8@;|G5HxzQFyi8~Ygz zelg*%fM3n|EY6_wABB0}=3{Yg7UcRYPLVN-G4JytER8!l_ua=_bHT@8=BnS#8B{wK zQ-7WFay+BgTlmzE!_+)8;;88aur)2gqNWqU>QU24;HW8$I~iSH)N~5iT=h3uC)RU( zjZRtPshBlxj~Q<*QGYX7zxB5;dRf2vQcTVI#ZmtlOQsYRb8K)OHrw+E!ud zc|9AhFXGMt8@C!uM8)gJZq) zUSEN(FXFDu<6JL|y9%x^*1H;PuDa{_&R6sNjb^+Sb3NZT_HqQ{b(ng5f4Dx^)V=y( zQO6D7s5iZ@H=^r{xSR60;{CrFU0>9D3)o!swfUL26>JUq+=IWT)M5{}fs1>%9Zfy< z@By%z))!0n@IiR&VF@_S)Q7{8SlW3#hyM2z5`Q_J>3bm zCVlQ{BcodE>0@B$PVdXd;p(xcyTNLjd+LWpZTEo9_qj~Z<0s(yVo#q0t3}?Yz_F(^ z@6+h|BJVR`wbO8uhuyyBO7CkDmt@_xJ@g_1NPV!D^aUy2mfUV~-VZ z+_x`-^~IjPlE)RFmHW{3#h$(jR*OB|4|Xo~*wfd*)}+rp-OH%v+5;FL!nVcqJ(%0PBIlcvswI2h^!}o2lXUx3E z8Rg;o4%qjez9$&vvG#YtuI+s0={N3CMtw2I_rS6CQ($@cz7O`^oA)%MJbXU@ugiVU zFv?@?AA()m`OMSr98WUpi#dJ-jJjrc z*!9ysyaQK{KKvJKp1OT-eS7X0eejo>wb&cu(>nU#vyOC+ebLmTj(%XD(=?_5O+EV1 z2sTgMJ`7;=vJd+DV`|nWj=2Ydi+$J(O+8`;fn7iC!(cS^SbqrEJazjJYdJ(TqD{_H!JgfAdfq&m031KDofB=G@*Izbo817hzHRZfNSk_W--r0{&{~ z-u8s6X@36j0#b?J0qXDLi3q!6#;(n^Nnq#JXK$@lEo#{dY%Qy>SbJ|Y_2Bz}(^~e0 zt7+E4P&0A-ZrBged5n$UB~!pn#H2Qa&bhz+@$pmpo29wNTCcs-7xhj9TkmQt>N@~U zJ@|p(wBGl@)wH$LBo8M!g4t(^|z*@4@)^snu()vDWLo))%!L0=DPDXMo*P z@R?w9;{OC@fz2^apJ!Ap&ZxZ_k9qBcc}52^?wn)K*Djc6bXP{tsAqUKa|}rM(uAA8 zEa&$5NbviyIaqow=H_~QE}jQh)4Uuae?Fv`e-xT}{I{% literal 10080 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 f@3}nwu3Q4|K#X(r`R@Uqv1MS_(C-A^i7_|+Z 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 OfSqHUKF_F{XY{`mRA{&W diff --git a/gsk/resources/vulkan/border-clip-rounded.frag.glsl b/gsk/resources/vulkan/border.frag similarity index 72% rename from gsk/resources/vulkan/border-clip-rounded.frag.glsl rename to gsk/resources/vulkan/border.frag index d31718abb9..988b1f6f4a 100644 --- a/gsk/resources/vulkan/border-clip-rounded.frag.glsl +++ b/gsk/resources/vulkan/border.frag @@ -1,6 +1,6 @@ #version 420 core -#include "constants.glsl" +#include "clip.frag.glsl" #include "rounded-rect.glsl" layout(location = 0) in vec2 inPos; @@ -12,14 +12,6 @@ layout(location = 5) in vec4 inBorderWidths; layout(location = 0) out vec4 color; -vec4 -clip (vec4 color) -{ - RoundedRect r = RoundedRect(vec4(push.clip_bounds.xy, push.clip_bounds.xy + push.clip_bounds.zw), push.clip_widths, push.clip_heights); - - return color * rounded_rect_coverage (r, inPos); -} - void main() { RoundedRect routside = RoundedRect (vec4(inRect.xy, inRect.xy + inRect.zw), inCornerWidths, inCornerHeights); @@ -28,5 +20,5 @@ void main() float alpha = clamp (rounded_rect_coverage (routside, inPos) - rounded_rect_coverage (rinside, inPos), 0.0, 1.0); - color = clip (inColor); + color = clip (inPos, inColor * alpha); } diff --git a/gsk/resources/vulkan/border.frag.spv b/gsk/resources/vulkan/border.frag.spv index ab43d3dec875290b475213235d1216dd3ea52201..1a3fda7d674c2c22673390ff18699cbda49b41d8 100644 GIT binary patch literal 9560 zcmai(d4N@Q6~`|y0|=u60&akVilPE;BWS1$E)509fE%vEF!NxZ4sXVpH-q8^No7`M zWt(kQTH0=_nM;;tmS&b_mX(#-zGp6__W8Vb5B|LWbe+TR`~9BtJHPWg_jm7`H;x*) z*O)9D!GGIlmyXD4*TifjJj=#sqibW^vJ;oh8?1KEYdP#719r$p)#8lVF>A^i7_|+Z z<%*8i;5Y?ajh%^gV*}VAHi5auvM6X2D`nYr=ndJptZi9G+lm!!%Z~5p>hJFutX|Mt z>gX+3N*&$hfl^nsJX|tvY!X+lboCB(rvZ&bq_s2>-^3cF-rjQmV0n;SgVou?>ke6{ zWmzLNjKklLId?qcKxcP(Xiz>bo0QJ&>KiT%bgnOLn;$tE=mR7b(j`n0-eFK%!K*z>%ceMxCHlO{= zeLbb}`krd7?uprM=mYiq9X79HTkV6@fuXMI++^{&!|PhY4o>>Ai#afRv@2u1M-#JV z^)&Zj&p^3y?(F}cxrL6`^UW|v4L4+aFm`SrAf>}8cYyfdIzAHIjX9@Py>p;*L(Uf$_%NJ%)KTrN$6pdWzlU3MzBcDq z1kdBIl9$$Pn}1F4JpTHe$NZau=ksrc*H^Eve;Yil_l^R;v%v4F&$lJD{oY;h-&5fC z7WjSe?hdP~&%eLmf1to0Ebxcm%x5?C`41QTj}-W$ui#^{$Kd%{j??NUb%8i-#~Y1;N|%Z*;(l6J?$v)weZf~ z{+`afF5jKyN;{{%UT3KgzrMiFDe&F`_dWdbbJI|JC%Ye?B=@ng5P!id_~`5+c>B;` z&#`@#!D?s4*A2UEsOi9L!*D;m9!F^HIgXnYdhMOX^Br$9-*e{mQ^n`LBW@Plnl7;h z)`VtlaPO7x5A(?VtdTok?mdz>h5xvkKU);Mtd*yhkyABRJyCw+S=eK0m=|ZT8uHJ;~_4 z)aQWg%XB8Ym(;>H1D}0K&2{a|Y!}To-x0CN`8Q=h1g|aOeAu4({3Z z9UWZ1@95zAeMhI1NOOao@YaDZhKe;`@6ey^hLgN!LH#P&yPIvZ2(6; z&yqayRlw$Rj=szCd({VaE&WZrfnB>F%n$FcEYsh{*n+vHXI#H)dT**=pH;bYhrq^M zNq+sqU}Myy&hx=hr)OMlZqK*z*6iF(;8~2u=rhLmg!&6qcsS;B?Yd2vm(ThF;(VU` zJ{NdA*ynwFMxS^6`(oaQ;O z1%5?=Usd4O6!`T8epAA|XSXJNEZFa-X+3^FP5GS(cm7=ocmCZ4eoukln{emfmvHCb zU*HcE_=5>|{zD0O{=)_SNP+wPH1;zM{8+-D1V5GY#hgL&pMZJamSb^lR^<9(PLVOI zFz@q9ER8!c_uWjcrQnk==c?bp8B{wNQ-6l@aw?QU1f;HW8$I}=@B)N~fux$4icPORtnG@Y`>voUMj9W&lqqW%uBe(UdK^s;{SHJF<9 zi=+Ov;9^g^(A1;;5;*Gb2FE_vf%V;<_jEnjx$4#*>p4dKJz#5ePsXpoqW&^izxAKX z=wKvR$U`@m6u1swJFgY`xI=YgH8ZvC;IW7IzYwnq14ytP-o-9i#)Ff$9n16c>}t>h z=WiP0+cDSkePb^tGrj{;kM9rf%r$kd5m?l5H8|=`@9VqJ^+nvf^SI*ue-FC8sQ0~K z=c;eX&&2z{)}YTl_&KE(dw4&%xQ7p*smC5Z2v*ZZV(A_}1dlze2FIEDFj(KE^kp>T zwU}D$=_6q0xub$+t^-?>KKFDDqgw3g<6v{A_vI6C_1M!5U^UG> zjl!a~8^O-^xlGUFC*k^HPoDy-#k^00V^8V4&!Fpzd7lNV#U4KgHkW$r@$+D7)aM?r zXH<(legRzE;}_A?V~<|~t7%^89={BaJyyVR-@XFY7km0@9#?!;ZbsJ^d-@t!E%tN^ z*j(zdr>}#pNuPVViBZk9$1vWG?TYEUE$89;2Hdl&?+!+J_`V4q#`N9EC_jRXp1W^h zlQ8o+Prq@uGU|&Q-v-CpcZ22O`wrMM=Dd3t<>C7-*!P~kdl}`i_V>W9Z9eDeH|{P* zeUan);8^>9usnP}0DJG9_W+|jd_M$l&3z9t%46*xfnD2t&eLy>`xx~_jvs?#?T5kg z@cjhrJ#yY7jPmgP6nsVQdz4WgYyS-F+U9efeses;sLveUo1bIehv2^e+neCO1Y2+L z$HC@^zhV3eY!2rc`#2W9UxQl;=J$)qXurYqJKwq<%Qc^^h2Y;}_GCF0YyU3SBj)#T z&tn?%2e^9tPWMN!^VI!4;m?d-{+^)kPnep&Cx|2WU%;-v8jJP+3RaJpzkyvpjrluV zJ=XsR*m>&yP7`Z6#_u%$1Y1iLGd`{3U+`ido<>uTI{ppz*;tN6td}Wru=CXI!x%;{`=D<$reJc*z?D}aR#-pjn`b}WxsoRHG%Q5<}J=j|8jqzz6JHU&5*bz-V>X-obossroBAR;K zk4a$XsoRIij9&IZ-%gmCeGo_PDd1usrlP4w%+6rfPy4V7ntJqMSFrQc?L(~P7=73c zY%TW2cd@V~RO2uj$wVYMIJ7BgfMi_rUDuOh*6ap*D*gV-h~E zz~|@O-WtCT+?*@1sC{2F_2B!1U26q@HFR$Wz|}N=|L_7*iQfV0@8dZL`(egz$+fv) zbL+FW)~Xh@90<0SjaaOG5Sn`MgTZMnhrrb|YhkFFI6fN=MKq7G@mbOWZX+hOCOYT- z4#US!?QfROHP(9VrM{?l0oZysVNu`VXzIa_0H^i73a+NbW#6=@cOgFW7#sB-2~KMj zN4-bkK<#SFowLrYol#rcTdnC> zgyT$XId(R7F?Kn21vZhn#Rz_2yXTZr-_THLxUqhqQW~h% zDy4F@Ug>L8*Hw%gm&8?TeFG!qG@yfsw3ZIyJ6WSLFi;&Dt`3uHxG{6x>LZWWvaEv| z#^WEtoI8QB-dnDY49mx7lhe66V6^tx{+GF?7i|+LQGS)@zk|>8fhE(T{7p&;I4U{z`RC zf1_FVq-+oLdMkg)=9RYBKHR8}^fhKBi_coOdT!X9q%XUf1G7iFGq!p(DeF>Ca}W2| ztF3A#O-sWiH_G}-<-nAs8d9JlDe29}KK2SWTh3A3GnD5C%L%sFhwK+eb zz^{bU?^0u+6~8`s{ysM3d{xe`37*GaC$FsDKL5txdHm*_$NXD^=ksraw^nbhe>*&_ zcT0iaQQ%u!^KDUczuOqo`F9og-35LRyj-%n*8F=5{`(62{sMmh&U|*$n*U(I|4@NH z{6Bnb_6R&bmvQnuw#~gf&d4WmaHRRZJF+egc&&0(Db9TdQ3vN*9C)=kxfTaqZ2=l* zu`ygNb33&1d;e5x&5sokW14qSwRUpz6Lenw0aEvV3Vmt*;qh#(G-tKeOlh2VShcoz zuwJgzpP%2Jor9jflk*DvLU`}MP=9Y;m-k?`wtUb=xXvYo_)>wdD)4fFd#Cmd4h;H| z&FB59gFxz?(WA=`zjtZN4OtwB5uG={MY+m&4YypZebf{$ZV(`Hb?4vhNMwHYwi zN;P$JP04llv^R6TW7WdUKMihfedgbl(Ol~0F=jfWG0rn)FGk~y(RU~@&N&FtoFT>t6dE^HL0U*3cHMEpu{ z_?=(E>~Hw1VBbf~_nbw%`9?6~?dhY8)@D!L*JF%hG4;bh_GmXIyO-3$w>v)jlA7z< zm;GEc+qgAi_fKN=X|B1Dk^jxLj?ej`Tnp}5Hzv5}JLR5fx%n>2vHLJy?q`_)nf@xk z{HX1vQ{ExGql%Dr!bd%nDHf_sj;%TU!%2CHd44iWnTNE&+zTut+Fh}b2NG`1VA zrg@(1%_chInoH5lWz1Pvz$u&tgiq&-#C3IQN8a`-8sgb3s%$TJCsMh^TD1ueZEim{5{|Lexj9|CAIyL5l`PZmec^s{nMBB&(D;P z-#_f1_qM;6MKArm%%1JZ80Yj#aM~k(_euGN0>7rfuPg8y3w(2d-H1p={Emb>e`~^>zpcRUD)74#?)-Za?)-ZT{JsLeKjF@QAmPq`u)rTG@P`vV9sEeb z9|J$0^F^FN^Ph_O-j-rqFz2e@%o$W$j;TM% zd0D~e^9(-qvoJN!j5umK8*EK}CybiT0joz%=YpfAH10ffeNof-VCSko%{sB3;}e_& zYrFunM$fJB))Mt!2-a`?7c=@;zxqX(n)QpL{!75co?eQk9`#=aj`~aB*k>vED1d&Q*844UB4$=at}CFMZdq zLf02@*XD7qm&Uyst}oVm4cNKruIHVv=J}h>_*%^Myl*^LQy5=|smJ&K>vK)rXA~B7 zydE6&rtkF)==vh=jd@)0{l5uaU)1|%uyfTnVo(zEgobbTA>%NWLYVrsFccY&Q(JY(-h(-(Vs57@ctv8VTftx2DI zx{*;W_VhlmxzqRZezuRj%{{eYQQJ-6*i(8QKZvd`_VgjJTFm<}IQEpzyBS?y z%)14w7JK{%*j(zd$B%-oQJ;I<%%~Q7{1~{n$B(0_#~wccR?~daJ$@1%d#r-vUi=hT zU+n4Ad0g?c@)>k}v8T_1)nZSd1Di`d_VjtMHR*Ftw=$}^_E^R*V7p`bZqIr6z6kg1 z>f6F758s!-SLVJu80GWH=()QSn~a&ydHT(98>7C+@nvwVy$vi6-&eq%G3VXIC=cIP z!RvG1-Hh^B`)gp=-iA3(zd5!t>Wds-2glm?g5}}+26!{(y!#mC;rk|dL+-nuQ66i5 z3+&qFbDn;4+{36Za(o*cYd;8Xg|gDJKwq< z$u&P)$AEu^*^{MMto`#`kC(s4 zTd?b|#A5y5fz>1C_h8pgWBveFkM;iucAmQ5X<{wM_)haDu(b?g#;0}s8D8weU(nQ} zj=zHaY%Im1*1v((x6scejDN?Rr*0pfVDzyM`u>5b*#~jt{wKKDhbPh0Bjzcv>!*Eq z8m=CFcn0h|b^8!&IYuA;1-2G@V|-f2zv0C`Jd36tbvy^&jHP|}4_rO^;15pcsoRIq za3A}iZxp6xAHhV5y1UpaNKJ3isV;}VGgsIsFapax|F7{y(ntH@c2D^UR zhh5OrqYqQS&QrG!v6f@>VJg^K?2Yl(;ob5mxu=2s+<0c}m$BX>kLNx=2gdD+u67Hz zo%hZja5evK@89)}Q{NNp9Tb0WnhrNsJ^m)L7ufqupTAGY<8K~Q(Yr98y|8)IGL3QX z98YK52eY3u82y`vS{FISCj8(6pObTYYy1qjIeW0EeP1;7;0J(RYZ-qvbZ-a3)wDLa z50Fay`O&(M4?@@z1%>N^TeJ@{O3TJOx)|EgS!%b9N0aD|9G%-;&1vV OfSqHUKF_F{XY{`mRA{&W diff --git a/gsk/resources/vulkan/border-clip.vert.glsl b/gsk/resources/vulkan/border.vert similarity index 99% rename from gsk/resources/vulkan/border-clip.vert.glsl rename to gsk/resources/vulkan/border.vert index 8e0fc8375e..b37ea9ec9c 100644 --- a/gsk/resources/vulkan/border-clip.vert.glsl +++ b/gsk/resources/vulkan/border.vert @@ -1,6 +1,5 @@ #version 420 core -#define CLIP_RECT #include "clip.vert.glsl" layout(location = 0) in vec4 inRect; diff --git a/gsk/resources/vulkan/border.vert.spv b/gsk/resources/vulkan/border.vert.spv index 6a6cf93865891ea37a906dd086e750db87a14dc2..dfa95f1b596140d5f4fef5d428ae2daf1f0f1844 100644 GIT binary patch literal 7428 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 literal 720 zcmZ9I%Syvw5QWFyZM7F`TQ4A$E`{PkMGyrM$tF<62MCg85r}DNqu@*U6h5RI!SlsL zf>Wk5bLPyM`BN@U>Si1IHSExSt!E|GW-Y6w(Q%*L={lKD&(2R_w5^;H;dHES6-E5z zIgDv+%3JcTc;H%~tSnWtPYqS9X^!hTvzg=Gd;W6it&{gC@S-pdym`0^{3Lt};57=o zF!rO@d67^Rqqvuv-Toq4tQ4uaBaH7-#L4AWBVD#T@QK%?>LY%51&5TH+nJOn%=h*F6BQ6?=eCE diff --git a/gsk/resources/vulkan/color-clip.vert.glsl b/gsk/resources/vulkan/color-clip.vert.glsl deleted file mode 100644 index a869b8a625..0000000000 --- a/gsk/resources/vulkan/color-clip.vert.glsl +++ /dev/null @@ -1,28 +0,0 @@ -#version 420 core - -#define CLIP_RECT -#include "clip.vert.glsl" - -layout(location = 0) in vec4 inRect; -layout(location = 1) in vec4 inColor; - -out gl_PerVertex { - vec4 gl_Position; -}; - -layout(location = 0) out vec4 outColor; - -vec2 offsets[6] = { vec2(0.0, 0.0), - vec2(1.0, 0.0), - vec2(0.0, 1.0), - vec2(0.0, 1.0), - vec2(1.0, 0.0), - vec2(1.0, 1.0) }; - -void main() { - vec4 rect = clip (inRect); - - vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex]; - gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); - outColor = inColor; -} diff --git a/gsk/resources/vulkan/color-clip.vert.spv b/gsk/resources/vulkan/color-clip.vert.spv index 0b2711b2d1fafb954087b772fa9ea04c163f6a41..daaf33aa22ef03465f0c6117a5af985f64954f68 100644 GIT binary patch delta 278 zcmdlZyF!kanMs+Qfq@YSc^PI*68Nr0f9RMGgu`bn9Txa zgX9>Y{ArsDnNKrWDgZT40tzt$u@DejL-`=1Kw=>N1RxEv6vi(EvZrkhW#eWt1ZkN9 k#N|M22UGyk2IAWSwE_LiFdc}e0WnApWW@B%r5x^T01-hZN&o-= delta 156 zcmZ1>w?~$jnMs+Qfq@YSc^Rfo$`t5QfLr!5J=tAq624PQn=nh&UVvFqo7aA|i1l5Fn9-4!l*;N+qog`Idak zr&Q%X@EiDRIjW#|pV73lsEVQ5)BW~4-Mu}%D>Bn_Tb!HHzYko?jn`f`E!(*rF7Nkp z~sD1&n^6(Fng z##m>6}n|Qy|8MTu!p7s6tKWEnWDvE2Wh;upjz4j=+-+qy-5B2CCqn93A z?)QhSaeR6k#miKG+ZXG(dEf7VS1mDhKahXW7&dyImvs*(>_-#!&l7h29XszDvTN(3 zwdH<1N*ZxO{dwg9XZ1D)vd27Tg}bOf?XSnJ(I(Cuc>HW#xYuqTC)8{Se1BPSU3+1X6MR<%}iA?d1MQJ8`H7zdeUcy=&9{{;2tQ;Bd}(B}neKYs4u_!$%E^ z!De18&$rU2B;>-6eJfxe>eP4A$qgsH%s#A06*=IM?{*-85f7VrV_AIelk@QJ1)YB3 z$7bft|3lENer)Cr|4~)e&~A4C2O;j$pyMYlb~9iXb(hQlcgCU@{|I4j;c`cOC#)yj z8{Y}D@$;Q9n|a_nVK#og6WCW2k6u(I^Z^_Ej)XouP*!TbD}e)kRTYsR3_j2IlZ3wD zqZVv@oP8{zC-|rfdqG+7J(0{xh{rknR>LpSxogf*KQ=nGb8bQXCB~|RcODKtILy$h zFby2ZXCeKPh{Vc_=6*8<08U`aL@!m=6oGu-ucVM~&6obfw;LpFKr du9u~Q!F}Id!{M&2Zg#8brgY-*&Y|>UN%jaC8^9aCn$I zYQC?Oa+RP~$`yk~sn85gO7J>Dyr5R792dicxESH{Z_e2lrL(1+GbHKHCQc8d0^hJY z9h0QLE0V;>^SoK<#(a28opou%sI}(o4dR~f0 zKKgkoNj=^b{*Giszz-jL*ZGJ)cRKGy9Gm%(L;R)FegD|Zkoc0O$T_?{ANTwr53{8f zZ_OV1T;88O^fqz!5PMzxP04M6`(V>^TA<%|stWI!00;kuPNY6Q_}n2Y&_6NG!X`%U zYk}U0aW3|%BE;SZ{Qjv&9&vcgir8=6ctzmO@Zs{YU(4cgmma5c&)$%q-RE5fB)62$ zZVe0Y**W@SW+MXrZ{o0D8@cPi#WKM{RUpds2F9?aT7v_iw>(5KdN| zv%}W}e1MPnGTVK1Mm!-V!wzagERFRH{WZVGVld(JKCy!%JTnUM|;zdsY7=iio2&3#p*=A6L0 zhv8#)?^GrR-$WaIZcupk|u-+>3x`Pczs_XT|H z0J^XJPl&< TYu`80*Lx(LdVds0=QsBk!$zG( diff --git a/gsk/resources/vulkan/color-matrix-clip.vert.glsl b/gsk/resources/vulkan/color-matrix-clip.vert.glsl deleted file mode 100644 index 6ae0817157..0000000000 --- a/gsk/resources/vulkan/color-matrix-clip.vert.glsl +++ /dev/null @@ -1,38 +0,0 @@ -#version 420 core - -#define CLIP_RECT -#include "clip.vert.glsl" - -layout(location = 0) in vec4 inRect; -layout(location = 1) in vec4 inTexRect; -layout(location = 2) in mat4 inColorMatrix; -layout(location = 6) in vec4 inColorOffset; - -layout(location = 0) out vec2 outTexCoord; -layout(location = 1) out flat mat4 outColorMatrix; -layout(location = 5) out flat vec4 outColorOffset; - -out gl_PerVertex { - vec4 gl_Position; -}; - -vec2 offsets[6] = { vec2(0.0, 0.0), - vec2(1.0, 0.0), - vec2(0.0, 1.0), - vec2(0.0, 1.0), - vec2(1.0, 0.0), - vec2(1.0, 1.0) }; - -void main() { - vec4 rect = clip (inRect); - vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex]; - gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); - - vec4 texrect = vec4((rect.xy - inRect.xy) / inRect.zw, - rect.zw / inRect.zw); - texrect = vec4(inTexRect.xy + inTexRect.zw * texrect.xy, - inTexRect.zw * texrect.zw); - outTexCoord = texrect.xy + texrect.zw * offsets[gl_VertexIndex]; - outColorMatrix = inColorMatrix; - outColorOffset = inColorOffset; -} diff --git a/gsk/resources/vulkan/color-matrix-clip.vert.spv b/gsk/resources/vulkan/color-matrix-clip.vert.spv index 20b615e67b8637b81599e794d7dae7015ab5934f..f4951f653007b9ecf37bb1ac220e8a56dacaadf3 100644 GIT binary patch delta 1369 zcmY+E%}*0i6vby+O0_zE&_&aYXk5s~C2?UeXX7+-Tb=bn4tz4zVe>qO7*9xoo-n{*skAJ198 z?DZbl?yx$9(}mIq+!w}$i-Hjz3Uk7Wuqu2P+Rd>{tQT*2tU6d8b)1B9G-OwcHNSYW zDmxMEER7s5*77LCB%C?ZjHR>W($2%>Q)T~Xq3V}vcsrd{^DCCgQo(u$hKEOs+Kjht zy!g*LRd)%jepRJEY&W#&b;FJaeQyhW)WsJIZO*e{$Ah!kSh~R18OFB%*{x$8%dsQ7 zRrrd8xX>jW3~ic2!>;H_b2MiCG>4!4%WzXkru(e&RSMAsfgRYiXfs?Ar>$s(wwX?z za2u^Z$ptq@D-*(5;gG^;2fI(n^xmDT!Wm&e7O~et4V~qhJ*j=01E#O@W+>I|`lgcV zHuI@X`)^9SF5D1o#!2yL##^${Ce4o>>Fku4FW7q1;%HN*nM&7hixH1H6ue=_xg$;; zmeuZxqcH}n-4ka&%WC(<(TE$=2|4itft=)E4>3$eztw!;vjt!(zQY}`9>wCG^p%O)o|*h5S>*e(aB zJ;=Ox!|e1jb&>zZ_z{m_2elxM2DqX8%*j&Jb5Y=5DW{Q@soglAsp*x wadM(-)cGLji;NEfPWt6WqLHMa=Qn{nhi@gc?NQcb^EZHxd$`tG_xd~k0;FlZng9R* delta 1282 zcmZ9MOHY$Q6o#i4Xj3S$bWyuNB__&37sRkKnjnj=44Sxe)o6)L)Iu#uU6_U#T}uZs zF`}Rr5f!QRiWl&P7S_f;;2-cG_&%Q<@`Y*M%zNH*=A1LhBT) zLPlMZADfjiAul&Kz(|Fy-l+VNx4it~RLCztbM(;6D_H?-4^;$xmb15NuYayn3L^hZ|%J^EnA z3ZufXiFln%wKQwzqRD}qviNMyJ1vd|Sk$_z%W{WX0;i{Ke{8=EckHm|Vmkw)b|SXh z9!NyfGxGU!-Ia|tV*?$@%000=0_sWcGa551ep_HUZB87G%1*m4&Uu#89*Cn6cS3jL zt`CJ-fgGG6=BVaVHD;gZJfg7?I4{%$ckM?lZJwc|7q)pH%SKzUy@_OcQA`Q9&OQ-G zTeOMJj^-cbE7_c9xwzNjX#P>Ykxfo=aE6$zQQ~wLSrPZQ`d&8L3Ztxi*yjBx8x8Qh z_**AaPWvZ;e;DIm`pkHf^_Om!S*9152FXD6|-!ZRe9vvb{vf6(L ZJS6VJgTr>$*${8Gd_1m=Mo(9!{U7nfwN3y4 diff --git a/gsk/resources/vulkan/color-matrix-clip-rounded.frag.glsl b/gsk/resources/vulkan/color-matrix.frag similarity index 96% rename from gsk/resources/vulkan/color-matrix-clip-rounded.frag.glsl rename to gsk/resources/vulkan/color-matrix.frag index 88057c7915..00b7947286 100644 --- a/gsk/resources/vulkan/color-matrix-clip-rounded.frag.glsl +++ b/gsk/resources/vulkan/color-matrix.frag @@ -1,6 +1,5 @@ #version 420 core -#define CLIP_ROUNDED_RECT #include "clip.frag.glsl" layout(location = 0) in vec2 inPos; diff --git a/gsk/resources/vulkan/color-matrix.frag.spv b/gsk/resources/vulkan/color-matrix.frag.spv index 266c8777f56187e47dba4756918856154274e0b5..ec29f263bbba778e7ab642765ce84ce77d97e369 100644 GIT binary patch literal 2824 zcmZ{mX>$`t5QfLr!5J=tAq624PQn=nh&UVvFqo7aA|i1l5Fn9-4!l*;N+qog`Idak zr&Q%X@EiDRIjW#|pV73lsEVQ5)BW~4-Mu}%D>Bn_Tb!HHzYko?jn`f`E!(*rF7Nkp z~sD1&n^6(Fng z##m>6}n|Qy|8MTu!p7s6tKWEnWDvE2Wh;upjz4j=+-+qy-5B2CCqn93A z?)QhSaeR6k#miKG+ZXG(dEf7VS1mDhKahXW7&dyImvs*(>_-#!&l7h29XszDvTN(3 zwdH<1N*ZxO{dwg9XZ1D)vd27Tg}bOf?XSnJ(I(Cuc>HW#xYuqTC)8{Se1BPSU3+1X6MR<%}iA?d1MQJ8`H7zdeUcy=&9{{;2tQ;Bd}(B}neKYs4u_!$%E^ z!De18&$rU2B;>-6eJfxe>eP4A$qgsH%s#A06*=IM?{*-85f7VrV_AIelk@QJ1)YB3 z$7bft|3lENer)Cr|4~)e&~A4C2O;j$pyMYlb~9iXb(hQlcgCU@{|I4j;c`cOC#)yj z8{Y}D@$;Q9n|a_nVK#og6WCW2k6u(I^Z^_Ej)XouP*!TbD}e)kRTYsR3_j2IlZ3wD zqZVv@oP8{zC-|rfdqG+7J(0{xh{rknR>LpSxogf*KQ=nGb8bQXCB~|RcODKtILy$h zFby2ZXCeKPh{Vc_=6*8<08U`aL@!m=6oGu-ucVM~&6obfw;LpFKr du9u~Q!F}Id!{M&2Zg#8brgY-*&Y|>UN%jaC8^9aCn$I zYQC?Oa+RP~$`yk~sn85gO7J>Dyr5R792dicxESH{Z_e2lrL(1+GbHKHCQc8d0^hJY z9h0QLE0V;>^SoK<#(a28opou%sI}(o4dR~f0 zKKgkoNj=^b{*Giszz-jL*ZGJ)cRKGy9Gm%(L;R)FegD|Zkoc0O$T_?{ANTwr53{8f zZ_OV1T;88O^fqz!5PMzxP04M6`(V>^TA<%|stWI!00;kuPNY6Q_}n2Y&_6NG!X`%U zYk}U0aW3|%BE;SZ{Qjv&9&vcgir8=6ctzmO@Zs{YU(4cgmma5c&)$%q-RE5fB)62$ zZVe0Y**W@SW+MXrZ{o0D8@cPi#WKM{RUpds2F9?aT7v_iw>(5KdN| zv%}W}e1MPnGTVK1Mm!-V!wzagERFRH{WZVGVld(JKCy!%JTnUM|;zdsY7=iio2&3#p*=A6L0 zhv8#)?^GrR-$WaIZcupk|u-+>3x`Pczs_XT|H z0J^XJPl&< TYu`80*Lx(LdVds0=QsBk!$zG( diff --git a/gsk/resources/vulkan/color-matrix-clip-rounded.vert.glsl b/gsk/resources/vulkan/color-matrix.vert similarity index 97% rename from gsk/resources/vulkan/color-matrix-clip-rounded.vert.glsl rename to gsk/resources/vulkan/color-matrix.vert index 3888b7e460..eb3f4fa727 100644 --- a/gsk/resources/vulkan/color-matrix-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/color-matrix.vert @@ -1,6 +1,5 @@ #version 420 core -#define CLIP_ROUNDED_RECT #include "clip.vert.glsl" layout(location = 0) in vec4 inRect; diff --git a/gsk/resources/vulkan/color-matrix.vert.spv b/gsk/resources/vulkan/color-matrix.vert.spv index fa89276b21107d266635f7c9d3aa42a87c3ba3f0..89176d44e620f2ab293b9e4444defce6984f1d87 100644 GIT binary patch literal 3488 zcmZ9NYj;yc6owCNQ=kY6$VHc8u&5vxQMroTtTmv;mWy~dlqRJ|(+S6Q?#t}iGjlRJGPyp>*73JF`z0HWt=R~AmTk($(_EXmK69i$ zXdF3q{HPvVveD$I&$IkF#=!D?-d27E90bR}H24ZEgEep;JOB^DD1Rf&f01Y`o5*T2 z_1f%gZDzW@(CyaygL|!Jy_L6{^+w)nE)4S3rhXeretCPLwbCd%RPZR*QpqapBg+rN1=QY4->7 zZK^bOEb;m*uXa-|{X7@kzdzy(~YUX#AQfk&5%TB|0 zS(7R0o@HlcK#fDahRzOC8||~_oVRZ@*M@C^sibo!26C#?=`~=+(>;Kj>a;q&EAxY1 zUi8Pik+=UxCx7ot_|K*@8ur9HRQLy-)u`LE+5;Tw-bL@go8S@|JqL%JqsIBk*`G_L zo>r1xdEDbkbcZ?YvxCQzJqLob_xfEZapskqD{=N*?iO%;^XX^3_PJcYeN{KNcJJI1 zeKhrROJVbkX^UL;^oc&2-d_0HS8e0Ky!JEn?PM^=UTU*e<()|SR>3a(-MhN)t;+um z%yMEc`o=<**MBp!{^r_&ZXH$NI9TX@P4syQ-M$(lXa23s+T_m^y6;xbc<1fFafmZA z_IV&D!e<9^mi>A@e0HMA=@Z5|7 zr`v5VAknE42>Zh3uN>n$Mvd-2YWBAZkGQNg{9 zY)#s%-@eG1*E`~GvG>M1XkO3jeIOs}oJBV7Dly*kbIHa(MsVkm^>e>-^upd<0Qze4 zUHfMLB!{+(z;!MpxsvYZ6tZu_TC7!Fzo_FQWb4p2&8)7?e3wAEx0ee}-cde>kI_Bv zII~ZX<%C1u--`atAe&2{SnCRMIsQ|0IT7dhM-e{@XAXTLeh#@@>s53)5%J-B4X(V_ zb#yrqzOmK~ICJR}=kgh{H8_I1i7e+ngZmuWct>zwAj|0&XZj_wIn7~=KAuO7SzFZo zHL~B2=7wQk8jb-zTctCiP&T0t;4xio?)b>o20qiSUi}@4%T$pXlilvNbq@%aP@*J-F|Yjduk11G1ccaULyX zbDF~#ed0W{#U9(p<+?lQa>8NG@a-a(eSbuk6R}5q51{wJK@i`mKJvDL*T?VF0LVvQ zR*=mpALp`)Y)#s%f0>i@8#Q{Y7Lz1alk*a%LN XV*~R9@OR}I=E(J8!T$@dY>xi`o>B>H literal 2316 zcmZ9MSyK~16onhIu!)Gsq9O)STv$W}M3K#i0gMGM4QJO|KN}G z#VXI&GmWF2y48KoJ$?K3?K{b|jy>8orRG&?e&AKAe#6^~{1XpddrIdAd$r?gT9A_>od@`w&ItGSn_kp3Ii1-rTn|}i zZJvJcR^g3s-sXHzt9-mK-(9G%o{EOgX!ujbb)pTgsy+C1Z_ljT4A)#wnu&F<$FEPv?v z2ZuJaz1NiZy3W)joU?Bb9!KxJ(_$Dls+QwT{6JKEeQ|mFM$#3-TG)8K8#Vmo{=AzX z{6kwkZ|U^gw#MG&cUHqO zVFod%BSTGXF3225ZPBf!IO4+Xq&R8{_ff|A#6w5E^m00XY6vDaT6&zX0WIslzO1+y z$FVZ@J8)X+h?aY?m->P8vOb;8o>9doH`W7M;VZ}nrRT0-eEq`hnhP?YIIF=A;IX~Tfw6T)1T<^ zk7_19=Z&cTGJJA27>L{aH6$HBX}lUnme_=yXi zN;uA)PS)%N&uivPw|^nQs@S)^OZ+N7+%ESs7YPkq3JgW%Pxs^|OS7XQXSrB%IbR3&Uam*Lp=xS0!C3mBL!R~Iaw5BKV(W~I!y3vB{4?5tkmH+?% diff --git a/gsk/resources/vulkan/color-clip-rounded.frag.glsl b/gsk/resources/vulkan/color.frag similarity index 90% rename from gsk/resources/vulkan/color-clip-rounded.frag.glsl rename to gsk/resources/vulkan/color.frag index b66001c9f5..6b299dffd0 100644 --- a/gsk/resources/vulkan/color-clip-rounded.frag.glsl +++ b/gsk/resources/vulkan/color.frag @@ -1,6 +1,5 @@ #version 420 core -#define CLIP_ROUNDED_RECT #include "clip.frag.glsl" layout(location = 0) in vec2 inPos; diff --git a/gsk/resources/vulkan/color.frag.spv b/gsk/resources/vulkan/color.frag.spv index 29bbae9dfd0753ec73d49efa0eefb8c71d069d59..d3ef64ef49738ce7eb0b159e7147316852e50dc3 100644 GIT binary patch literal 1448 zcmZ9M>2A|d5QT4=I1MdbQ0c-}64FAT5D+SxA`qxT?vF@G#RHfSr^HfXTd@~)8x7N7F@jes@PcqSnfpb8BSx{dqn_7QV>k)o*5dqmXK{Yqk?pAVRp~fNbgyVy zaiU2yv%ZS$xoFdW5cb6;wqj=q!V?>T-4Y%TW`k+wfAo)CHBV&s=gIga3X^mYrsSzA z4xBSx#Ii4V?2&%GFVQ^olS`akS^Qhzr(^JC8_)JFJ{|>M$2PU?@u~1wHKmNJTD-$P zh7L9}6>Z)JoBF4P-W+Q?m%TP+b52zy@1OVFEMVk-_r8G9KUlwj(L2~@iK{muAG|I7 zMmL1P;l86=Rk|+ORe#jP##fhJlLkZZUy;Vo_ke#z8XtH=y{~3>;_$)QlBOP`l$>*eo3%%1#@rOC}q z`^v<=ats`yk9Ky)PoLO)5BOhdc6LS%4z+#>;ho{KkCr5#k=^h;W51Q395*G*)f1bU zZe-L0OsMt^_`_k%M{a67V15kfR|XPhFD7-P8U5xTY}hGsThTKte1h#}0J| zD;2Q&8Ae}yO~V`yB*eqVPj32S)`t?__MJAwKCrp73*z3WIysIc{EvZy4-Vf9_-}Ra mTEfoZ!sGDmy%LXI^M8mtdtQ_978}y}uKBwH|0A3``Thd?^lJ_P literal 720 zcmZ9I%Syvw5QWFyZM7F`TQ4A$E`{PkMGyrM$tF<62MCg85r}DNqu@*U6h5RI!SlsL zf>Wk5bLPyM`BN@U>Si1IHSExSt!E|GW-Y6w(Q%*L={lKD&(2R_w5^;H;dHES6-E5z zIgDv+%3JcTc;H%~tSnWtPYqS9X^!hTvzg=Gd;W6it&{gC@S-pdym`0^{3Lt};57=o zF!rO@d67^Rqqvuv-Toq4tQ4uaBaH7-#L4AWBVD#T@QK%?>LY%51&5TH+nJOn%=h*F6BQ6?=eCE diff --git a/gsk/resources/vulkan/color-clip-rounded.vert.glsl b/gsk/resources/vulkan/color.vert similarity index 96% rename from gsk/resources/vulkan/color-clip-rounded.vert.glsl rename to gsk/resources/vulkan/color.vert index 7f7a1e9226..ce85ea7fd3 100644 --- a/gsk/resources/vulkan/color-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/color.vert @@ -1,6 +1,5 @@ #version 420 core -#define CLIP_ROUNDED_RECT #include "clip.vert.glsl" layout(location = 0) in vec4 inRect; diff --git a/gsk/resources/vulkan/color.vert.spv b/gsk/resources/vulkan/color.vert.spv index 05d74a6b0b414c2f1816ed2dac6da05d4fbcbb97..4a0b396584d78136335392c93734318aafbdb0a5 100644 GIT binary patch literal 2148 zcmZ9N+foxj5QYbma8g7>4qA#qP*D(30YL;o#DJA5qE>kuW3rH~3cIQ72JucWd;s6U zhxA6v|C{W7m6Q>3sGEKSXy4h z zKH^JWt78%r+u_l%g^?foVPJFeUMymtX)m>-`c4=`aV1cd#AYpz&+$pq=E9FYaNqLh zupQK*GoH7${1?9#*Wr6@Jl(T=-Sdy?Hnq;onl z=&K)esDg6vZj%_bz{~*?@<6hu9J~puGd1{REJv+-sr%(D&Yj(NnjkH5aA%eV*Ibr3 zj(5OsE5(r)u9V`qKinq?=aUaV>gCSo^=HH}?;RUDHqOD9yE{Ch4CI(nKJufFN$b&` zmyFAwdcn+VUcdXa!y!|`{fQ2b|DbmK$u%lW9eD|BF2O_6@wp+)TMz?B{$cId;MWt( z+`|#iJ|bbw>s^VxDuF|s&!}``zP)rlV?uEFIBq<_@Q$014(@RMwvKDUoIws^5OjR0 z*}W%kLd{@isw=V6H*D0(o7}hjxt%$~7oK=9Gw9+UO6T6hPpUu6Bl$S{sdjn?M=Y3c z5{|bZ=dy$~A-tlUSo%4stjv+);9cHT>GT#mdBJ>ZaGd)*(TN4W($1MK{&j+>nRqaB ziVqn7LJIR{%qDkUQD2!KYGe`fTMXY9vCJBO`#8(tdS%8u=}gzr2r!Ol5wF7}RexC41}x4RNJghl<%_n!2$@2oH!!u_}xzVv8bLeIBV z2mM}C}Xc`gsR9^3pT@x6nssg1q$ag#_N6vmu?h zcZy-|Hmyy+v>f+RI)2=@q_^Phwj}ss<2&OU`l%e)wk4diW%Zox|BiHKm0GA3jGwFH zjdbe3wyPbCjePqO<^@|J!GBcEs)YH$$NjzT%yGuf4gXV_rHk5KuItj_|B6Q^$3I~U BocsU) literal 1780 zcmYk6YflqF6o#kt0*HW!TvWu?DqgsV3WyRFLrgJg(yEDHS8Nx$N!e|>Tf}er!5`p% z@JIT^#P^x*ke%jm=DhQs%bYn&exy2TOisT^vuB2D#*D}|X2O)LuGK%)H{ztdv9-Mk zW6I<$5ze%^WcLOAJv|CSj77<9$pgu*;c+>9>k7SBnGT@n%GgteO5nd4*S{5mvuz1^;7|*1^jyNcPz$wU V!=ny-UP^d3&UjDkf6BNk`45e`f7Ac~ diff --git a/gsk/resources/vulkan/linear-clip.frag.glsl b/gsk/resources/vulkan/linear-clip.frag.glsl deleted file mode 100644 index 1d03553705..0000000000 --- a/gsk/resources/vulkan/linear-clip.frag.glsl +++ /dev/null @@ -1,33 +0,0 @@ -#version 420 core - -struct ColorStop { - float offset; - vec4 color; -}; - -layout(location = 0) in float inGradientPos; -layout(location = 1) in flat int inRepeating; -layout(location = 2) in flat int inStopCount; -layout(location = 3) in flat ColorStop inStops[8]; - -layout(location = 0) out vec4 outColor; - -void main() -{ - float pos; - if (inRepeating != 0) - pos = fract (inGradientPos); - else - pos = clamp (inGradientPos, 0, 1); - - vec4 color = inStops[0].color; - int n = clamp (inStopCount, 2, 8); - for (int i = 1; i < n; i++) - { - if (inStops[i].offset > inStops[i-1].offset) - color = mix (color, inStops[i].color, clamp((pos - inStops[i-1].offset) / (inStops[i].offset - inStops[i-1].offset), 0, 1)); - } - - //outColor = vec4(pos, pos, pos, 1.0); - outColor = color; -} diff --git a/gsk/resources/vulkan/linear-clip.frag.spv b/gsk/resources/vulkan/linear-clip.frag.spv index a95b58f59bb67df32aa3c53e2b9e48ba39798e4d..86f9ea0cb42b8de137d13a7fbfcd196b0abf7660 100644 GIT binary patch literal 3032 zcmZ9NTUQ%p6o#iINf9W;)uUQ5NVRAcYfDdJTPm$VMZx0v6jBn%)G&!;z~x<+-uOej z^U7O)n5VUL^?4@qm9dkx*~jnQhi}g?ba47m6dmAqIQlLcJWoak(W7WIs${&jytX{s zPn)xIm(Ck89t~xI#vCE41edlOaiZfm^c?gmGzYbyEog#s#*q+dh%8a`3m~OvB&sdf zYbz_Y^6%5Wg?1ol&OE592=du zH?y~SVSaCOZXUf%?lE|;+ea?ZIWgT%cPI0ev-;!YZmZX7q;ay9#XtKfzLND8C$*hM zGj1j6Dkx%>qO*_T%%CrdyOwr)$Q7cr`E)lo`>k}}<}CMXC}p#Y6AxPBP;?Q$!!7f3 zrUTz%cQ;8h|21v7-+6a;(=0V2{!%voIN7hYjlI{{X>8~I`~TA`S+3RHetWT-^wUO? z+G7Qr?1GWE_j>4qxU6<&T)#&-&Hf|1_v`HI-^b0gt^H7T-tEck?N+?i&Y-gzol%dR zu&74Q?veLbBd_u#B&NFirEYFx-L(*_tj}H0=e&YXS)VnCxqKR+KgK$*sNdMYQbhL+SVcKHHUFW`758oW{mO)qzb$Wouoc9)A+q=NOfo zf}86!Jk+P|Ts>nw;;4I%0Z028$VXiD7c%X^%}MkbWNp@NoiD+wkdN`|FGKcn8vPvH zGuq7m3Ve`jkYC+h3Hj}BHrI`REtk!wegSSj#W}c7#q*cZy^AoHE6CR4`6k?Z6wm(E z-9K&mH{oKLL%;e~ZaanUyXsl*a*|27C&8vY)Y;8t{o<(mZt1_wom-z6KIZ-li~DV? zcjmV))Zk8>E$GhR;$ynso)B-Z?Sk(4`?-D{d}nt8a({j$tGn`4ZgYqJq@riwKK~G} z?`i0H$U2q9aSy7H`!j~7J_R{Hb5@}nVA+fIzd0+e7-9vCY2*RMaE9?Bx)|<`zB7kxW^oDG9U5axoXu6p{Nm_ypWGqOI(Plb z&fFZ<@&??#sVAYVt(pSVhkt_7SAk&C_EMb}pB zZ4F&)eZ}5BLf7{by*am!A@Q{b{7;ZWozDDING$C|tj}^^IQKbvv92%BwH5375?w5P zMXayT^@X~=MiyWD&v~uiAX~3KciQ^vPx_1W)b literal 2320 zcmYk6+fP$L5XKjJu>yj~%?n}??@B(x=fo%OC#?$!-zmm(jys>T##%?4(bd!DkdwX3dVdDL0ad7LNQob2@1=_ zQoUYm#2>4bVl|8^#d5e^DaGN33VAs%FN{jnowA>hQHI|`#$=K{!f35huWZI)^iH0X z=~mr(tsy&`^cY6L_GUS(MDeP;M*g%pE?ufsYugFVm?7yU@OoUU%g!nbA75>2t5J#f ze9UC;Y&w}i7;%uADRW+NhD3kNrWsqR?L=`BAIE3o%&oQ)C#7YYK+6ZohP-mt!Dy(Z3acRuod%af5Nms#^$pgx${ z@a`R^H{Pm`$1R>yK0WW3(91Wmvd<3dW6!@-k@v;-SNX&aNctu8fejDy@0GCE4zYs! zB+LLFV)NpnSNwl;7G5~uavTG)n;f}>ZtQ2dq!{KS!@PD^Exh9(&{OkdIMFKZm*zW9%Y`B;MzqRWU=767BkjH**NQk*} zv$8q&Nj16qO$k2k<+$c#!$r*JninSa!}hx%8-Dz}p+#vvdM9>Ef{)&@>4Dwcmar4o z(~@j=7j}9_LVf)HPM2-W-R-V0Z_V)pvi-Z=6UOJ??Y=PF#QeKG5GM9ncVli3CGg{S z`~}&rPiFo|0vCRt>#>cwb1TArU#r6S{Jx$D!$r*JS`#Mb`dXI_KmISa*Qc`Sml$ul zOZu6_{icY!-_)x9OR$6IHitYXoF(=`!dc!uyJGI-yWbLV-niQ>8qE7=*JyY5m$JG0 ku6=K>WaH!R?l* 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 literal 2320 zcmYk6+fP$L5XKjJu>yj~%?n}??@B(x=fo%OC#?$!-zmm(jys>T##%?4(bd!DkdwX3dVdDL0ad7LNQob2@1=_ zQoUYm#2>4bVl|8^#d5e^DaGN33VAs%FN{jnowA>hQHI|`#$=K{!f35huWZI)^iH0X z=~mr(tsy&`^cY6L_GUS(MDeP;M*g%pE?ufsYugFVm?7yU@OoUU%g!nbA75>2t5J#f ze9UC;Y&w}i7;%uADRW+NhD3kNrWsqR?L=`BAIE3o%&oQ)C#7YYK+6ZohP-mt!Dy(Z3acRuod%af5Nms#^$pgx${ z@a`R^H{Pm`$1R>yK0WW3(91Wmvd<3dW6!@-k@v;-SNX&aNctu8fejDy@0GCE4zYs! zB+LLFV)NpnSNwl;7G5~uavTG)n;f}>ZtQ2dq!{KS!@PD^Exh9(&{OkdIMFKZm*zW9%Y`B;MzqRWU=767BkjH**NQk*} zv$8q&Nj16qO$k2k<+$c#!$r*JninSa!}hx%8-Dz}p+#vvdM9>Ef{)&@>4Dwcmar4o z(~@j=7j}9_LVf)HPM2-W-R-V0Z_V)pvi-Z=6UOJ??Y=PF#QeKG5GM9ncVli3CGg{S z`~}&rPiFo|0vCRt>#>cwb1TArU#r6S{Jx$D!$r*JS`#Mb`dXI_KmISa*Qc`Sml$ul zOZu6_{icY!-_)x9OR$6IHitYXoF(=`!dc!uyJGI-yWbLV-niQ>8qE7=*JyY5m$JG0 ku6=K>WaH!R?l*o|V16Z+(0E&OSToSh{IhQ7qwS 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 rIbb#SGr#*)(F?`J6ry -- 2.30.2